Coded light refers to a technique whereby data is modulated into the visible illumination emitted by a light source, e.g. by an LED based luminaire. Thus in addition to providing illumination (for which purpose a light source may already be present in an environment), the light source also acts as a transmitter capable of transmitting data to a suitable receiver of coded light. The modulation is typically performed at a high enough frequency that it is imperceptible to human vision, i.e. so the user only perceives the overall illumination and not the effect of the data being modulated into that illumination. In this way the data may be said to be embedded into the light from the light source.
Coded light can be used in a number of applications. For instance, one application is to communicate between luminaires, e.g. as part of an intelligent lighting system. Each of a plurality of luminaires in an indoor or outdoor environment may be equipped with both a coded light transmitter and receiver, and the ability to communicate between them via coded light may be used to control the light in the environment in an at least partially distributed fashion. E.g. each luminaire may also be equipped with a presence sensor to detect presence of a being (typically a human), and information may be shared between two or more or the luminaires in order to determine how to control the light from the different luminaires in dependence on the detected presence.
In another example application, coded light may be used to provide information from a luminaire to a remote control unit for controlling that luminaire, e.g. to provide an identifier distinguishing it amongst other such luminaires which the remote unit can control, or to provide status information on the luminaire (e.g. to report errors, warnings, temperature, operating time, etc.). In one such example, the remote control unit may comprise a mobile user terminal such as smart phone or tablet having an inbuilt camera or other light sensor. With the terminal running a suitable application, the user can direct the camera at a luminaire and thereby detect the identifier coded into the light from that luminaire. Given the identifier of the luminaire it is looking at, the terminal may then control that luminaire by sending back a return signal (e.g. via RF).
In yet further applications the coded light may be used to provide information to a user, e.g. to provide identifiers of the luminaires for use in commissioning, or to enable provision of location related information. For example each luminaire in an indoor and/or outdoor environment (e.g. in the rooms and corridors of an office complex, and/or paths of a campus) may be arranged to emit light embedded with a respective identifier identifying it within that environment. If a user has a mobile terminal equipped with a camera or other light sensors, and an associated application for detecting coded light, the terminal can detect the identifier of a luminaire illuminating its current location. This can then be used to help the user navigate the environment, by looking up the current location in location database mapping the identifiers to locations of the luminaires. Alternatively or additionally, this may be used to look up information associated with the user's current location, such as information on exhibits in particular rooms of a museum. E.g. the look up may be performed via the Internet or a local network to which the terminal has access, or from a local database on the user terminal. Alternatively the information could be directly coded into the light from one or more luminaires. Generally speaking, the applicability of coded light is not limited.
One way to implement coded light is by amplitude keying, by switching the amplitude or power of the emitted light between discrete levels in order to represent channel bits (or more generally channel symbols). For instance in the simplest case, when the light source is on (emitting) this represents a channel bit of value 1 and when the light source is off (not emitting) this represents a channel bit of value 0, or vice versa. A photo sensor in the coded light receiver can detect when the light is on or off, or distinguish between the different levels, and thereby receive the channel bits or symbols.
In order to communicate data, the modulation typically involves a coding scheme to map data bits (sometimes referred to as user bits) onto channel symbols. An example is a conventional Manchester code, which is a binary code whereby a user bit of value 0 is mapped onto a channel symbol in the form of a pulse off-on or low-high (elementary channel bits 0 and then 1) and a user bit of value 1 is mapped onto a channel symbol in the form of a pulse on-off or high-low (elementary channel bits 1 and then 0), or vice versa. In many coding schemes such as Manchester coding and many other line codes, the clock and data are able to be recovered from the same signal (otherwise a separate clock would have to be sent or the transmitter and receiver would have to be assumed to be perfectly synchronized). A signal coded according to such a scheme may be referred to as self-clocking. As used herein, this means information contributing to both the recovery of timing and the detection of data is coded together into each (composite) channel symbol, i.e. each unit pulse of the coding scheme. A self-clocking signal having this property may also be described as isochronous, i.e. information for use in deriving timing and data is embedded in the period of each channel symbol (each unit pulse of information). Where each channel symbol represents a user bit, as in Manchester coding, this means both timing and data information is embedded into the period of each user bit.
FIG. 8 illustrates an example of how timing and data may be recovered from a self-clocking signal. FIG. 8a shows an example of a signal as transmitted over a coded light channel, and below that FIG. 8b shows the corresponding signal as received at a coded light receiver. In this example the data in the signal is coded according to a conventional Manchester code. The received signal is passed through a matched filter as well as one or more other filters such as a low pass filter. The matched filter correlates a template pulse against the received signal. The template pulse is one of the possible symbols of the coding scheme in question; e.g. in the case of the Manchester code, the pulse on-off or low-high representing a user bit of value 1. The output of this correlation by the matched filter is a sequence of non-rectangular pulses, as illustrated in FIG. 8c for the example Manchester coded signal. Note how the shape of each filtered pulse depends not only on the user bit represented by the corresponding symbol, but also on the adjacent bits represented by the adjacent symbols. The shape is a result of the matched filtering, the low pass filtering and inter-symbol interference.
The timing recovery can be considered in terms of an “eye pattern”, the concept of which will be familiar to a person skilled in the art. The filtered signal is arranged into multiple windows, each window comprising the waveform of one of the filtered pulses or of a consecutive sequence of the filtered pulses (i.e. of one or more of the channel symbols). If several of these windows are overlaid with one another as if contemporaneous, i.e. with the symbol periods of the different windows aligned, then a pattern of open “eyes” emerges. FIG. 8d shows an eye pattern for the unfiltered received signal and FIG. 8e shows the eye pattern for the filtered version of the signal. In the filtered signal (FIG. 8e) the data detection points correspond to positive or negative peaks of the eye diagram (shown circled), e.g. where the matched filter correlates a symbol representing a user bit of value 1 with the template pulse this outputs a positive peak and where the matched filter correlates a received symbol representing a user bit of value 0 with the template this results in a negative peak (a trough). In between these data detection points, the waveforms of the eye pattern have points crossing zero. The timing of these zero-crossings allows the clock to be recovered.
FIG. 8 illustrates a theoretical situation with no noise present. However, in reality the eye pattern will be blurred due to noise in the signal, resulting in a jitter in the recovered clock signal. A digital phase-locked loop (DPLL) operating on zero crossings using data-dependent jitter compensation has been described for example by Patric G Ogmundson et al, “Zero-Crossing DPLL Bit Synchronizer with Pattern Jitter Compensation” (IEEE Trans-COM, Vol. 39, No. 4, April 1991). This method minimizes the residual clock jitter for systems requiring high clock accuracy for a relatively high SNR (high order QAM data transmission systems or synchronization of power systems). Also typically, the zero crossings are on a regular grid, disturbed by noise and data-dependent jitter resulting from inter-symbol interference (ISI).